import axios, { AxiosRequestConfig } from "axios";

/*
 * @Author: TJN tjn@246@126.com
 * @Date: 2024-07-17 09:48:58
 * @LastEditors: TJN tjn@246@126.com
 * @LastEditTime: 2024-07-26 13:39:25
 * @FilePath: \router\src\plugins\axios\Axios.ts
 * @Description:
 *
 * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
 */
export default class Axios {
  private instance;
  constructor(config: AxiosRequestConfig) {
    this.instance = axios.create(config);

    this.interceptors();
  }

  public request<T, D = ResponseResult<T>>(config: AxiosRequestConfig):Promise<D> {
    return new Promise(async (resolve, reject) => {
      try {
        const response = await this.instance.request<D>(config);

        resolve(response.data);
      } catch (error) {
        reject(error);
      }
    });
    // return;
  }

  private interceptors() {
    this.interceptorsRequest();
    this.interceptorsResponse();
  }

  private interceptorsRequest() {
    this.instance.interceptors.request.use(
      function (config) {
        // 在发送请求之前做些什么
        return config;
      },
      function (error) {
        // 对请求错误做些什么
        return Promise.reject(error);
      }
    );
  }

  private interceptorsResponse() {
    // 添加响应拦截器
    this.instance.interceptors.response.use(
      function (response) {
        // 2xx 范围内的状态码都会触发该函数。
        // 对响应数据做点什么
        return response.data;
      },
      function (error) {
        // 超出 2xx 范围的状态码都会触发该函数。
        // 对响应错误做点什么
        return Promise.reject(error);
      }
    );
  }
}
